SDK调用示例

阿里云SDK针对ROS简化了使用编程语言定义和部署云资源的过程(如Java、TypeScript、Go、Python、PHP、C++、C#、Node.js和Swift)。本文为您介绍如何使用阿里云SDK调用ROS API。

说明

关于阿里云SDK的详细信息,请参见什么是阿里云SDK?

查看OpenAPI文档

在调用OpenAPI前,建议您先阅读对应接口文档,了解、学习调用该接口所需要的参数及权限等。更多信息,请参见API概览

准备工作

  1. 获取AccessKey信息。

    获取当前账号AccessKey信息用于配置凭证,如果尚未创建,请参见创建AccessKey

    重要

    为避免主账号泄露AccessKey带来的安全风险,建议您创建RAM用户,授予RAM用户资源编排ROS相关的访问权限,再使用RAM用户的AccessKey调用SDK。更多信息,请参见为RAM角色授权

    如果您不了解AccessKey且希望快速的使用SDK,可以按照下文创建并授权一个仅用于调用OpenAPI的RAM用户。

    1. 创建RAM用户。

      1. 访问RAM用户列表,单击创建用户

      2. 设置登录名称,并选择访问方式使用永久 AccessKey 访问

      3. 单击确定,创建RAM用户并保存AccessKey IDAccessKey Secret信息。

        重要

        RAM用户的AccessKey Secret只在创建时显示,不支持查看,请注意保存。

      image

    2. 完成授权。

      1. 访问RAM用户列表,单击目标RAM用户最右侧操作列的添加权限

      2. 权限策略区块中输入关键字ROS进行搜索,选择AliyunROSFullAccess权限策略。

        重要

        如果系统策略不符合您的需求,根据最小授权原则,建议您创建自定义策略。更多信息,请参见通过可视化编辑模式创建自定义权限策略

        image

        • AliyunROSFullAccess:管理资源编排服务(ROS)的权限。

        • AliyunROSReadOnlyAccess:只读访问资源编排服务(ROS)的权限。

      3. 单击确定新增授权,完成授权操作。

  2. 配置凭证。

    为避免将AccessKey硬编码到业务代码中带来的安全风险,建议您采用配置环境变量的方法管理AccessKey。本文以设置环境变量为例配置凭证。

    Linux和macOS系统

    通过export命令配置环境变量

    重要

    使用export命令配置的临时环境变量仅对当前会话有效,当会话退出之后所设置的环境变量将会丢失。若需长期保留环境变量,可将export命令配置到对应操作系统的启动配置文件中。

    • 配置AccessKey ID、AccessKey Secret。

      # 将<ACCESS_KEY_ID>替换为您自己的AccessKey ID。
      export ALIBABA_CLOUD_ACCESS_KEY_ID=<ACCESS_KEY_ID>
      # 将<ACCESS_KEY_SECRET>替换为您自己的AccessKey Secret。
      export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ACCESS_KEY_SECRET>
    • 验证是否配置成功。

      执行echo $ALIBABA_CLOUD_ACCESS_KEY_ID命令,如果返回正确的AccessKey ID,则说明配置成功。

    Windows系统

    通过图形用户界面GUI
    • 操作步骤

      以下为Windows 10中通过图形用户界面设置环境变量的步骤。

      在桌面右键单击此电脑,选择属性>高级系统设置>环境变量>系统变量/用户变量>新建,完成以下配置:

      变量

      示例值

      AccessKey ID

      • 变量名:ALIBABA_CLOUD_ACCESS_KEY_ID

      • 变量值:LTAI4GDty8ab9W4Y1D****

      AccessKey Secret

      • 变量名:ALIBABA_CLOUD_ACCESS_KEY_SECRET

      • 变量值:IrVTNZNy5yQelTETg0cZML3TQn****

    • 测试设置是否成功

      单击开始(或快捷键:Win+R)> 运行(输入 cmd)> 确定(或按 Enter 键),打开命令提示符,执行echo %ALIBABA_CLOUD_ACCESS_KEY_ID%echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%命令。若返回正确的AccessKey,则说明配置成功。

安装运行环境以及SDK依赖

您需要安装编程语言的对应版本,以及配置ROS SDK依赖,以满足运行环境。

可参考下图在OpenAPI门户中,根据您使用的编程语言配置环境、SDK依赖。

image

使用阿里云SDK

本节以ListStacks - 查询资源栈列表接口为例,为您展示如何使用阿里云SDK调用ROS API。

生成或编写代码

生成代码

您可以通过OpenAPI生成代码并下载,调用API。

  1. 登录资源编排API调试列表

  2. 选择您需要使用的API,并填写参数,单击发起调用。本文以ListStacks接口为例。

  3. SDK示例页签下的Python页签,单击下载完整工程,下载Python SDK示例代码包。

  4. 在本地解压示例代码包,并进入alibabacloud_sample目录。

image

编写代码

您可以根据API文档自行编写代码并调用API。

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

from alibabacloud_ros20190910.client import Client as ROS20190910Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_ros20190910 import models as ros20190910_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> ROS20190910Client:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        config = open_api_models.Config(
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 请参考 https://api.aliyun.com/product/ROS
        config.endpoint = f'ros.aliyuncs.com'
        return ROS20190910Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        list_stacks_request = ros20190910_models.ListStacksRequest(
            region_id='cn-hangzhou'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 复制代码运行请自行打印 API 的返回值
            client.list_stacks_with_options(list_stacks_request, runtime)
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        list_stacks_request = ros20190910_models.ListStacksRequest(
            region_id='cn-hangzhou'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 复制代码运行请自行打印 API 的返回值
            await client.list_stacks_with_options_async(list_stacks_request, runtime)
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:]) 

运行代码

运行代码得到如下输出结果。

{
  "TotalCount": 1,
  "PageSize": 10,
  "RequestId": "692E6895-AEFC-550C-B968-AE929BB68891",
  "PageNumber": 1,
  "Stacks": [
    {
      "Status": "IMPORT_CREATE_COMPLETE",
      "OperationInfo": {},
      "ResourceGroupId": "rg-acfmz7hmshz****",
      "ServiceManaged": false,
      "StatusReason": "Stack IMPORT_CREATE completed successfully",
      "CreateTime": "2023-06-26T09:40:26",
      "StackType": "ROS",
      "RegionId": "cn-hangzhou",
      "DisableRollback": false,
      "StackName": "TemplateScratch-ResourceImport-wffTp****",
      "Tags": [
        {
          "Value": "rg-acfmz7hmshzcriy",
          "Key": "acs:rm:rgId"
        }
      ],
      "TimeoutInMinutes": 60,
      "StackId": "814d2113-348c-41f1-adb2-85d3aadf****"
    }
  ]
}